import i18next, { ModuleType } from 'i18next';
import { initReactI18next } from 'react-i18next';
import * as RNLocalize from 'react-native-localize';
import { getStorageItem, localStorage } from '@utils/storage.ts';
import localesLanguages from '@pages/locales';

export interface LanguageLocale {
  // 语言英文名
  language_en: string;
  // 语言中文名
  language_zh: string;
  // 默认的LCID
  default_LCID: string[];
  // Google翻译API language code
  google_language_code: string;
  // 该语言所有LCID
  all_LCID: string[];
}

export const lngKey = '@lng';
const default_language_code = 'en';
// 读取当前多语言字典列表支持的语言language_code
const supportedLanguages = require('./language_locale_list.ts').map(
  (lang: LanguageLocale) => lang.google_language_code,
);

const locales = RNLocalize.getLocales();

// console.log('RNLocalize.getLocales()====', {locales});

/**
 * 从当前系统语言，找出多语言字段列表支持的语言
 * 读取当前多语言字典列表支持的语言，默认取第一个，如果不存在，则取默认语言
 * @returns
 */
export const getSystemLanguage = (): string => {
  const locales = RNLocalize.getLocales();
  // console.log('RNLocalize.getLocales()====', {locales});

  // 遍历 locales，查找第一个支持的语言
  for (const locale of locales) {
    if (supportedLanguages.includes(locale.languageCode)) {
      return locale.languageCode; // 返回第一个支持的语言
    }
  }

  // 如果没有找到支持的语言，则返回默认语言
  return default_language_code;
};

/**
 * 切换语言
 * @param lng
 */
export const changeLanguage = async (lng: string) => {
  // 检查传入的语言是否有效
  const validLng = supportedLanguages.includes(lng) ? lng : getSystemLanguage();
  // 切换语言
  await i18next.changeLanguage(validLng);
  // 持久化当前选择
  localStorage.setStorageItem(lngKey, validLng);
};

const languageDetector = {
  type: 'languageDetector' as ModuleType,
  async: false,
  detect: function () {
    console.log('Detect method called'); // 确认 detect 方法被调用
    try {
      // 获取上次选择的语言
      const lastLanguage = localStorage.getStorageItem(lngKey);
      console.log({ lastLanguage });
      if (lastLanguage && supportedLanguages.includes(lastLanguage)) {
        return lastLanguage;
      } else {
        const currentLanguage = getSystemLanguage();
        return currentLanguage;
      }
    } catch (error) {
      console.error('Error in language detection:', error); // 捕获并打印错误
    }
  },
};

// 初始化i18next配置
i18next.use(languageDetector).use(initReactI18next).init({
  // lng: default_language_code, // 默认语言
  fallbackLng: default_language_code, // 切换语言失败时的使用的语言
  debug: __DEV__, // 开发环境开启调试
  // 资源文件
  resources: localesLanguages,
});

export default i18next;
